/*
 * @Author: 舒克
 * @Official Accounts: 氧化1028
 * @email: 143587623@qq.com
 * @github: https://gitee.com/KingSio
 * @Date: 2020-12-09 18:04:05
 * @LastEditTime: 2021-01-31 11:24:58
 * @FilePath: \Vue全栈后台\项目\vue_shop\src\api\axios.js
 */
import axios from 'axios'
import router from '../router'
import { Message, Loading } from 'element-ui'

import config from '@/config'
let loading;
//判断是本地环境还是线上环境
const baseUrl =
  process.env.NODE_ENV === 'development'
    ? config.baseUrl.dev
    : config.baseUrl.pro
//全局配置请求头可以放在这里
//`headers` 是即将被发送的自定义请求头
//比如：headers: {'X-Requested-With': 'XMLHttpRequest'},
const instance = axios.create({
  baseURL: baseUrl, // api的base_url,baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
  //timeout: 100000
  // headers: {
  //     'Content-Type': 'application/json;charset=utf-8'
  //   }
})

const startLoading = () => {
  // 使用Element loading-start 方法
  loading = Loading.service({
    lock: true,
    text: '加载中……',
    background: 'rgba(0, 0, 0, 0.7)'
  })
}
//request拦截器，请求头设置token
//通过接口获取菜单数据，使用axios请求拦截添加token，保证拥有获取数据的权限
instance.interceptors.request.use(
  config => {
    startLoading() //开启加载图标
    console.log(config)
    if (window.sessionStorage.getItem('token')) {
      config.headers.Authorization = window.sessionStorage.getItem('token') // 让每个请求携带自定义token 请根据实际情况自行修改
    } //在最后必须返回cofig
    return config
  },
  error => {
    Promise.reject(error)
  }
)

//response拦截器，状态拦截
instance.interceptors.response.use(
  response => {
    //处理响应
    console.log('处理响应')
    console.log(response)
    loading.close() //关闭加载图标
    return response
  },
  error => {
    //请求出现问题
    var str = error + ''
    if (str.search('timeout') !== -1) {
      // 超时error捕获
      Message({
        type: 'error',
        message: '请求超时，请再次尝试'
      })
    }
    Promise.reject(error)
  }
)

export default instance
